技術問答
技術文章
iT 徵才
Tag
聊天室
2024 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
第 12 屆 iThome 鐵人賽
DAY
5
0
自我挑戰組
30天|入門NestJs連載學習筆記
系列 第
5
篇
D05 CH7 | SRP 單一職責原則
12th鐵人賽
azsx96385
團隊
Outcome First
2020-09-18 13:14:43
663 瀏覽
分享至
1. SPP 單一職責原則:一個模組應只對唯一的一個角色負責
以角色為模組凝聚的核心
角色定義,因為相同時刻和原因,受到變動,視為同一同一個角色
在參與讀書會的過程中,我們有深入討論,怎麼樣該視為同一個角色,我自己的結論是,在設計的當下,或者可預期的未來,使用模組的人,都會因為在相同時刻和目的,使用者模組中的方法,那麼視為同一個角色,即使他們如書中說明,他們屬於不同部門,理由是沒有一步到位的設計,且永不變動的需求,所以時候到的時候,再來更改就好了,架構是隨著時間演化的
2. 凝聚是種力量,將程式碼綁定在一起,用來對角色負責
把相同相關的程式碼收攏再一起,或是把因為會有相同變動的程式碼歸納在一起,我一開始想到的是內聚性,書中提到這樣的好處是,避免為了類似的需求,碎片化的到處修改,此外也避免重複部署的成本,而我的理解是,至少對我最直接的幫助是,我知道要修改某需求,我只要到特定模組去就可以了,好變更,易維護
3.不遵守SRP 風險
意外重複 |多角色共用method ,造成互相牽制影響
書中提到的例子是HR系統,同時有三種角色在使用HR & 財務,他們共用計算加班薪資的方法,但萬一政府要修改加班認定的規則,那麼工程師修改加班薪資的方式,就會造兩個角色的衝突
合併修改|共同編輯一個類別,導致合併了修改
同上例子,簡單說就是兩個人改了同一份檔案,造成檔案合併修改,引發災難
解決辦法
將類別根據角色做拆分小類別
這是回歸到最根本問題,究竟你的類別使用者是誰?他們使用方法的時機為何
Employ class → PayCalculator class & HourReporter class
Facade 模式
什麼是 Facade ?
Facade 只負責實例化和委託具有函式的類別
用手洗衣服故事,來說明Facade模式
假設今天你要手洗衣服,你要做一系列動作,拿個桶子→放水→放洗衣精→浸泡衣服→用手搓揉→擰乾,想像每一個動作都需要調用一個類別的方法,光是手洗衣服這件事,就需要調用六個類別.
假設今天走到自動洗衣機,你只需要丟衣服,按下洗衣服,done! ,洗衣機自動幫你放水,浸泡,搓揉,脫水,你不需要知道洗衣機怎麼做到的,你只需要呼叫洗衣機類別,然後使用它的方法,這個方法就幫你把以上不同類別的方法調用完畢
參考
Facade 門面模式
留言
追蹤
檢舉
上一篇
D04 part2 設計原則 引言
下一篇
D06 CH8 | OCP 開放-封閉原則
系列文
30天|入門NestJs連載學習筆記
共
26
篇
目錄
RSS系列文
訂閱系列文
1
人訂閱
22
D22 台南的散步點心
23
D23 台南|國慶煙火在漁光
24
D24 無暇程式碼-CH20 商業邏輯
25
D25 Ch 22 整潔的架構
26
D25 ch 22 整潔的架構
完整目錄
直播研討會
{{ item.subject }}
{{ item.channelVendor }}
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
1064
組
團體組數
40
組
累計文章數
22195
篇
完賽人數
600
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
windows server
linux
css
react
vue.js
熱門問題
請問內網IP如何轉外網IP?
兩端防火牆使用IPSEC互PING之問題
如何寫公式才能利用excel 觸發一個數據時傳送一個訊息給 自已的line呢?有沒有可以用其它方式,來取代line notify 的方法,因為line 開始收費
Windows7升級Windows10後網路功能異常
python爬蟲 動態生成網頁104人力銀行
區域網路問題提問
新手學習編程,哪種編程語言好?
vmware 虛擬機(windows)裡顯示使用容量與實際檔案容量不符合
HeidiSQL 查詢結果亂碼問題
2台 Hyper-V 2008 R2 叢集主機(硬體規格相同), 如何加入一台新機? 謝謝.
熱門回答
請問內網IP如何轉外網IP?
HeidiSQL 查詢結果亂碼問題
新手學習編程,哪種編程語言好?
Fortigate 50B 重置密碼
區域網路問題提問
熱門文章
每日一篇學習筆記 直到我做完專題 :( [Day31]
每日一篇學習筆記 直到我做完專題 :( [Day32]
每日一篇學習筆記 直到我做完專題 :( [Day33]
每日一篇學習筆記 直到我做完專題 :( [Day34]
隨時切換 WINDOWS 右鍵新舊版選單
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}